//
//  HttpTool.swift
//  ----meilishuo
//
//  Created by wkywangking on 2017/3/2.
//  Copyright © 2017年 wkywangking. All rights reserved.
//

import UIKit
import Alamofire
/* -----利用cocoapods安装框架
 cd 文件拖进去
 pod init 初始化一个profile
 pod search Alamofire  
 复制 安装版本到 profi
 回到终端,q,退出
 pod install
 */



public enum HTTPToolMethod: String {
    case options = "OPTIONS"
    case get     = "GET"
    case head    = "HEAD"
    case post    = "POST"
    case put     = "PUT"
    case patch   = "PATCH"
    case delete  = "DELETE"
    case trace   = "TRACE"
    case connect = "CONNECT"
}
class HttpTool: NSObject {
    
    // 封装网络工具类
    // 思想: 可能多次访问,那么,如果第三方框架出问题的时候,就要到处修改代码,所以,封装成一个方法,到时只需要修改工具类里面的就行了
    
    // 参数method的类型是枚举,在框架内部,我们需要重写一个枚举来替代
    static func loadRequest(urlString: String, method: HTTPToolMethod, callBack: @escaping ([String:Any], Error?) -> ()){
        // 把自定义枚举的method的值当做参数传给框架的枚举,这样,就能转换为框架的值,因为是可选类型,所以要进行guard 守护来解包
        guard let method = HTTPMethod(rawValue: method.rawValue) else{
            return
        }
        Alamofire.request(urlString, method: method).responseJSON { (response: DataResponse<Any>) in
            // 获取数据: 数据保存在响应体的result中,而result是一个枚举,要用switch来取值
            switch response.result{
            case .success(let value):
                callBack((value as? [String:Any]) ?? [:], nil)
            case .failure(let error):
                callBack([:], error)
            }
        }
    }
    
}
